/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package usuario;

import favorito.Favorito;
import java.util.*;
import listaDeMusica.ListaDeMusica;
import musica.Acervo;
import musica.Musica;
import musica.Playlist;

/**
 *
 * @author Guilherme, Leandra, Jan, Hiago
 */
public class Usuario {

    private String login;
    private String senha;
    private boolean uploadFinalizado;
    private Favorito favorito;
    private ListaDeMusica listaDeMusica;
    private Set<Playlist> playlists;

    public Usuario(String login, String senha) {
        this.login = login;
        this.senha = senha;
        this.favorito = new Favorito(new HashSet<Musica>());
        this.playlists = new LinkedHashSet<Playlist>();
    }

    public void executarMusica() {
        Iterator itPl = playlists.iterator();
        while (itPl.hasNext()) {
            Playlist pl = (Playlist) itPl.next();
            pl.executarMusica();
        }

    }

    public void adicionarMusica(String nomePl, Musica musica) {

        Iterator it = playlists.iterator();

        boolean achou = false;

        while (it.hasNext() && !achou) {
            Playlist pl = (Playlist) it.next();
            if (pl.getNome().equals(nomePl)) {
                pl.adicionarMusica(musica);
                achou = true;
            }
        }
//        if (achou) {
//            System.out.println("achou a playlist");
//        } else {
//            System.out.println("nao achou a playlist");
//        }

    }

    public Favorito obterFavorito() {
        return this.favorito;
    }

    public void fazerUpload(List musicas) {
        listaDeMusica.adicionarMusicas(musicas);
    }

    public List obterMusicasDuplicadas() {
        return listaDeMusica.obterMusicasDuplicadas();
    }

    public List obterMusicasNaoDuplicadas() {
        return listaDeMusica.obterMusicasNaoDuplicadas();
    }

    public void finalizarUpload() {
        uploadFinalizado = true;
    }

    public boolean isUploadFinalizado() {
        return uploadFinalizado;
    }

    public Playlist buscarMusica(String palavraChave) {
        return Acervo.buscarMusica(palavraChave);
    }

    public void gerenciarPlaylist(Playlist pl) {
        //esta operação apenas delega outras operações 
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void criarPlaylist(String nome) {
        Playlist aux = new Playlist(nome);
        playlists.add(aux);
    }

    public void excluirPlaylist(Playlist pl) {
        playlists.remove(pl);
    }

    public void excluirPlaylist(List<Playlist> playlists) {
        for (Playlist p : playlists) {
            excluirPlaylist(p);
        }
    }

    public void excluirPlaylist(String nome) {
        for (Playlist p : playlists) {
            if (p.getNome().equals(nome)) {
                excluirPlaylist(p);
            }
        }
    }

    public Set<Playlist> getPlaylists() {
        return playlists;
    }

    public void setPlaylists(Set<Playlist> playlists) {
        this.playlists = playlists;
    }
}
